package comlile.string;

import java.util.Scanner;

/*
 * String类的获取功能：
 * int length():返回字符串的长度。字符的个数。
 * char charAt(int index):返回字符串中指定位置的字符。
 * int indexOf(int ch):返回指定字符在字符串中第一次出现的位置
 * 		97,'a'
 * int indexOf(String str):返回指定字符串在字符串中第一次出现的位置
 * int indexOf(int ch,int fromIndex):返回指定字符从指定位置开始在字符串中第一次出现的位置
 * int indexOf(String str,int fromIndex):返回指定字符串从指定位置开始在字符串中第一次出现的位置
 * String substring(int start):返回从指定位置开始到末尾的子串
 * String substring(int start,int end):返回从指定位置开始到指定位置结束的子串----注意左包右不包
 */
public class _04StringObtain {

	public static void main(String[] args) {
		String s = "helloworld";

		// int length():返回字符串的长度。字符的个数。
		System.out.println("length():" + s.length());
		System.out.println("----------------------");

		// char charAt(int index):返回字符串中指定位置的字符。
		System.out.println("charAt():" + s.charAt(0));
		System.out.println("charAt():" + s.charAt(3));
		// System.out.println("charAt():" + s.charAt(13)); //
		// StringIndexOutOfBoundsException
		System.out.println("----------------------");

		// int indexOf(int ch):返回指定字符在字符串中第一次出现的位置
		System.out.println("indexOf():" + s.indexOf('l'));
		// int indexOf(int ch,int fromIndex):返回指定字符从指定位置开始在字符串中第一次出现的位置
		System.out.println("indexOf():" + s.indexOf('l', 4));

		// 自己学习
		// int indexOf(String str):返回指定字符串在字符串中第一次出现的位置
		// int indexOf(String str,int fromIndex):返回指定字符串从指定位置开始在字符串中第一次出现的位置
		System.out.println("indexOf(String str):" + s.indexOf("ll"));
		System.out.println("indexOf(String str,int fromIndex):" + s.indexOf("ld", 4));
		System.out.println("----------------------");

		// String substring(int start):返回从指定位置开始到末尾的子串
		System.out.println("substring():" + s.substring(0));
		System.out.println("substring():" + s.substring(5));
		// String substring(int start,int end):返回从指定位置开始到指定位置结束的子串
		// 需求：我要得到owo。你写
		System.out.println("substring():" + s.substring(4, 7)); // 包括左边，不包括右边

		System.out.println("----------------------");

		stringTraverse("java");

		System.out.println("----------------------");

		statisticalCharacterNumber();
	}

	/*
	 * 字符串的遍历:遍历获取字符串中的每一个字符
	 */
	static void stringTraverse(String str) {
		String s = "java";

		// 通过charAt()方法依次获取字符
		// System.out.println(s.charAt(0));
		// System.out.println(s.charAt(1));
		// System.out.println(s.charAt(2));
		// System.out.println(s.charAt(3));

		// 但是，如果字符串的个数比较多，代码就会很麻烦，而且重复度很高
		// for (int x = 0; x < 4; x++) {
		// System.out.println(s.charAt(x));
		// }

		// 如果字符数据较多，不可能数，所以，我们要用一个获取字符个数的方法
		// length();
		for (int x = 0; x < s.length(); x++) {
			// System.out.println(s.charAt(x));

			char ch = s.charAt(x);
			System.out.println(ch);
		}
	}

	/*
	 * 统计一个字符串中大写字母字符，小写字母字符，数字字符出现的次数。(不考虑其他字符) 举例：Hello123World 结果： 大写：2 小写：8
	 * 数字：3
	 * 
	 * 分析： A:键盘录入一个字符串 B:定义三个统计变量 int bigCount = 0; int smallCount = 0; int
	 * numberCount = 0; C:遍历字符串，得到每一个字符 D:如何判断字符是大写，小写还是数字呢? char ch = ???;
	 * 
	 * ASCII码表： a 97 z=122 A 65 Z=90 0 48 9=57
	 * 
	 * ch>=97 && ch<=122 ...
	 * 
	 * ch>='a' && ch<='z' ch>='A' && ch<='Z' ch>='0' && ch<='9' E:输出结果
	 */
	static void statisticalCharacterNumber() {
		// 键盘录入一个字符串
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入一个字符串：");
		String s = sc.nextLine();

		// 定义三个统计变量
		int bigCount = 0;
		int smallCount = 0;
		int numberCount = 0;

		// 遍历字符串，得到每一个字符
		for (int x = 0; x < s.length(); x++) {
			char ch = s.charAt(x);

			// 如何判断字符是大写，小写还是数字呢?
			if (ch >= 'A' && ch <= 'Z') {
				bigCount++;
			} else if (ch >= 'a' && ch <= 'z') {
				smallCount++;
			} else if (ch >= '0' && ch <= '9') {
				numberCount++;
			}
		}

		// 输出结果
		System.out.println("大写：" + bigCount);
		System.out.println("小写：" + smallCount);
		System.out.println("数字：" + numberCount);
	}

}
